package com.lone.design.pattern.creational.singleton.demo4;

import java.lang.reflect.Constructor;

/**
 * @author Lone
 * @date 2021/9/24 10:13 周五
 * 通过反射破坏单例
 */
public class ReflectTest {
    public static void main(String[] args) throws Exception {
        // 获取singleton的字节码对象
        Class<Singleton> singletonClass = Singleton.class;
        // 获取无参构造方法对象
        Constructor<Singleton> constructor = singletonClass.getDeclaredConstructor();
        // 取消访问检查
        constructor.setAccessible(true);
        // 创建实例
        Singleton instance1 = constructor.newInstance();
        Singleton instance2 = constructor.newInstance();
        // 单例被破坏
        System.out.println(instance1 == instance2);
        // 解决方案 在构造方法来添加一些限制，如果存在实例，那么就抛出异常
    }
}
